package com.huangyi.portalservice.user.controller;


import com.huangyi.adminapi.appuser.domain.dto.UserEditReqDTO;
import com.huangyi.commondomain.domain.R;
import com.huangyi.commondomain.domain.vo.TokenVO;
import com.huangyi.portalservice.user.entity.dto.CodeLoginDTO;
import com.huangyi.portalservice.user.entity.dto.WechatLoginDTO;
import com.huangyi.portalservice.user.entity.vo.UserVo;
import com.huangyi.portalservice.user.service.IUserService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 门户程序用户入口
 */
@RequestMapping("/user")
@RestController
@Slf4j
public class UserController {

    @Resource
    private IUserService userServiceImpl;

    /**
     * 微信登录
     * @param wechatLoginDTO 微信登录DTO
     * @return token令牌
     */
    @PostMapping("/login/wechat")
    public R<TokenVO> login(@RequestBody @Validated WechatLoginDTO wechatLoginDTO) {
        return R.ok(userServiceImpl.login(wechatLoginDTO).convertToVo());
    }

    /**
     * 发送短信验证码
     * @param phone 手机号
     * @return 验证码
     */
    @GetMapping("/send_code")
    public R<String> sendCode(@RequestParam String phone) {
        return R.ok(userServiceImpl.sendCode(phone));
    }

    /**
     * 验证码登录
     * @param codeLoginDTO 验证码登录信息
     * @return token信息VO
     */
    @PostMapping("/login/code")
    public R<TokenVO> login(@RequestBody @Validated CodeLoginDTO codeLoginDTO) {
        return R.ok(userServiceImpl.login(codeLoginDTO).convertToVo());
    }

    /**
     * 修改用户信息
     * @param userEditReqDTO C端用户编辑DTO
     * @return void
     */
    @PostMapping("/edit")
    public R<Void> edit(@RequestBody @Validated UserEditReqDTO userEditReqDTO) {
        userServiceImpl.edit(userEditReqDTO);
        return R.ok();
    }

    /**
     * 获取用户登录信息
     * @return 用户信息VO
     */
    @GetMapping("/login_info/get")
    public R<UserVo> getLoginUser() {
        return R.ok(userServiceImpl.getLoginUser().convertToVO());
    }

    /**
     * 退出登录
     * @return void
     */
    @DeleteMapping("/logout")
    R<Void> logout() {
        userServiceImpl.logout();
        return R.ok();
    }
}
